package funcionarios;
import java.util.ArrayList;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import GerenciadorDeEscolas.Validadores;
/**
 * 
 * @author Caio 
 *
 */
public class Funcionario {
	private String nome;
	private int matricula;
	private String cpf;
	private String endereco;
	private Data dataAdmissao;
	private Data dataPosse;
	private String telefone;
	private String email;
	private ArrayList<Integer> listaMatriculas = new ArrayList();
	private Validadores valida = new Validadores();
	
	
	/**
	 * 
	 * @param nome
	 * Nome do funcionario
	 * @param cpf
	 * CPF digitado no formato XXX.XXX.XXX-XX
	 * @param endereco
	 * @param telefone
	 * Telefone no formato (XX)XXXX-XXXX
	 * @param email
	 * Email valido
	 * @param dataAdmissao
	 * Objeto do tipo data
	 * @param dataPosse
	 * Objeto do tipo data
	 * @throws Exception
	 */
	
	public Funcionario(String nome, String cpf, String endereco, String telefone,String email, Data dataAdmissao, Data dataPosse) throws Exception {
		
		if(!(valida.validaNome(nome))){
			throw new Exception("Nome invalido");
		}
		this.nome = nome;
		this.matricula = geraMatricula();
		if(!(valida.validaCpf(cpf))){
			throw new Exception("CPF invalido");
		}
		this.cpf = cpf;
		if(!(valida.validaEndereco(endereco))){
			throw new Exception("Endereco invalido");
		}
		this.endereco = endereco;
		this.dataAdmissao = dataAdmissao;
		this.dataPosse = dataPosse;
		if(!(valida.validaTelefone(telefone))){
			throw new Exception ("Formato de telefone invalido");
		}
		this.telefone = telefone;
		if(!(valida.validaEmail(email))){
			throw new Exception("Formato de email invalido");
		}
		this.email = email;
	}

	/**
	 * 
	 * @return O telefone do funcionario
	 */
	public String getTelefone() {
		return telefone;
	}
	/**
	 * 
	 * @param telefone
	 * Telefone do funcionario
	 * @throws Exception 
	 */
	public void setTelefone(String telefone) throws Exception {
		if(!(valida.validaTelefone(telefone))){
			throw new Exception ("Formato de telefone invalido");
		}
		this.telefone = telefone;
	}
	/**
	 * 
	 * @return O nome do funcionario
	 */
	public String getNome() {
		return nome;
	}
	/**
	 * 
	 * @param nome Nome do funcionario
	 * @throws Exception
	 */
	public void setNome(String nome) throws Exception {
		if(!(valida.validaNome(nome))){
			throw new Exception("Nome invalido");
		}
		this.nome = nome;
	}
	/**
	 * 
	 * @return A matricula do funcionario
	 */
	public int getMatricula() {
		return matricula;
	}
	/**
	 * Gera uma nova matricula aleatoriamente
	 */
	public void setMatricula() {
		this.matricula = geraMatricula();
	}
/**
 * 
 * @return CPF do funcionario
 */
	public String getCpf() {
		return cpf;
	}
	/**
	 * 
	 * @param cpf
	 * CPF no formato XXX.XXX.XXX-XX
	 * @throws Exception
	 */
	public void setCpf(String cpf) throws Exception {
		if(!(valida.validaCpf(cpf))){
			throw new Exception("CPF invalido");
		}
		this.cpf = cpf;
	}
	/**
	 * 
	 * @return O endereco do funcionario
	 */
	public String getEndereco() {
		return endereco;
	}
	/**
	 * 
	 * @param endereco 
	 * Muda o endereco do funcionario
	 * @throws Exception
	 */
	public void setEndereco(String endereco) throws Exception {
		if(!(valida.validaEndereco(endereco))){
			throw new Exception("Endereco invalido");
		}
		this.endereco = endereco;
	}
	/**
	 * 
	 * @return A data de admissao
	 */
	public Data getDataAdmissao() {
		return dataAdmissao;
	}
	/**
	 * 
	 * @param dataAdmissao
	 * Nova data de admissao
	 */
	public void setDataAdmissao(Data dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}
	/**
	 * 
	 * @return A data da posse
	 */
	public Data getDataPosse() {
		return dataPosse;
	}
	/**
	 * 
	 * @param dataPosse
	 * Nova data de posse
	 */
	public void setDataPosse(Data dataPosse) {
		this.dataPosse = dataPosse;
	}

	private int geraMatricula(){
		Random rand = new Random();
		int num = rand.nextInt(10000) + 99999;
		while(listaMatriculas.contains(num)){
			num = rand.nextInt(10000) + 99999;
		}
		listaMatriculas.add(num);
		return num;
		
	}
	/**
	 * Muda o endereco de email
	 * @param email
	 * Email valido
	 * @throws Exception
	 */
	public void setEmail(String email) throws Exception{
		if(!(valida.validaEmail(email))){
			throw new Exception("Formato de email invalido");
		}
		this.email = email;
	}
	/**
	 * 
	 * @return O email do funcionario
	 */
	public String getEmail(){
		return email;
	}
	
	
}
